home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / term-source.lha / ScreenPanel.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  34KB  |  1,329 lines

  1. /*
  2. **    ScreenPanel.c
  3. **
  4. **    Editing panel for screen configuration
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_SCREENMODE=1000,GAD_USE_PUBSCREEN,GAD_PUBSCREENNAME,GAD_FONT,
  17.             GAD_COLOURMODE,GAD_SCREENTITLE,GAD_MAKESCREENPUBLIC,
  18.             GAD_BLINKING,GAD_PALETTE,GAD_RED,GAD_GREEN,GAD_BLUE,GAD_RESET,
  19.             GAD_STDPENS,GAD_EDITPENS,GAD_WINDOW_BORDER,GAD_SPLIT_STATUS,
  20.             GAD_STATUS_LINE,GAD_PAGER,GAD_PAGEGROUP,
  21.  
  22.             GAD_USE,GAD_CANCEL,GAD_DEFAULT
  23.         };
  24.  
  25.     /* CannotChangeColours(struct Configuration *LocalConfig,LONG OriginalColourMode):
  26.      *
  27.      *    This routine rolls the dice and determines whether the user should
  28.      *    be allowed to change the screen colours or rendering pens.
  29.      */
  30.  
  31. STATIC BOOL
  32. CannotChangeColours(struct Configuration *LocalConfig,LONG OriginalColourMode)
  33. {
  34.     if(LocalConfig->ScreenConfig->ColourMode == OriginalColourMode && !LocalConfig->ScreenConfig->UseWorkbench && LocalConfig->ScreenConfig->ColourMode == Config->ScreenConfig->ColourMode && Screen)
  35.     {
  36.         LONG ThisDepth,RequestedDepth;
  37.  
  38.         ThisDepth = GetBitMapDepth(Window->WScreen->RastPort.BitMap);
  39.  
  40.         switch(LocalConfig->ScreenConfig->ColourMode)
  41.         {
  42.             case COLOUR_AMIGA:
  43.  
  44.                 RequestedDepth = 2;
  45.                 break;
  46.  
  47.             case COLOUR_EIGHT:
  48.  
  49.                 RequestedDepth = 3;
  50.                 break;
  51.  
  52.             case COLOUR_SIXTEEN:
  53.  
  54.                 RequestedDepth = 4;
  55.                 break;
  56.  
  57.             case COLOUR_MONO:
  58.  
  59.                 RequestedDepth = 1;
  60.                 break;
  61.         }
  62.  
  63.         return((BOOL)(ThisDepth < RequestedDepth));
  64.     }
  65.     else
  66.         return(TRUE);
  67. }
  68.  
  69. STATIC BOOL
  70. ScreenPenPanel(struct Window *Window,UWORD *Array,UWORD *DefaultArray,LONG Depth)
  71. {
  72.     LayoutHandle *Handle;
  73.     UWORD PrivateArray[16];
  74.     BOOL Result;
  75.  
  76.     Result = FALSE;
  77.  
  78.     CopyMem(Array,PrivateArray,sizeof(PrivateArray));
  79.  
  80.     if(Handle = LT_CreateHandleTags(Window->WScreen,
  81.         LAHN_LocaleHook,    &LocaleHook,
  82.         LAHN_ExactClone,    TRUE,
  83.     TAG_DONE))
  84.     {
  85.         struct Window *PanelWindow;
  86.  
  87.         LT_New(Handle,
  88.             LA_Type,    VERTICAL_KIND,
  89.         TAG_DONE);
  90.         {
  91.             LT_New(Handle,
  92.                 LA_Type,    VERTICAL_KIND,
  93.                 LA_LabelID,    MSG_PENPANEL_DRAWING_PENS_TXT,
  94.             TAG_DONE);
  95.             {
  96.                 LT_New(Handle,
  97.                     LA_Type,    VERTICAL_KIND,
  98.                 TAG_DONE);
  99.                 {
  100.                     LT_New(Handle,
  101.                         LA_Type,            PALETTE_KIND,
  102.                         LA_LabelID,            MSG_PENPANEL_BACKGROUND_TXT,
  103.                         GTPA_Depth,            Depth,
  104.                         LAPA_SmallPalette,    TRUE,
  105.                         LA_UWORD,            &PrivateArray[BACKGROUNDPEN],
  106.                         LA_Chars,            15,
  107.                         LA_ID,                100 + BACKGROUNDPEN,
  108.                     TAG_DONE);
  109.  
  110.                     LT_New(Handle,
  111.                         LA_Type,            PALETTE_KIND,
  112.                         LA_LabelID,            MSG_PENPANEL_TEXT_TXT,
  113.                         GTPA_Depth,            Depth,
  114.                         LAPA_SmallPalette,    TRUE,
  115.                         LA_UWORD,            &PrivateArray[TEXTPEN],
  116.                         LA_ID,                100 + TEXTPEN,
  117.                     TAG_DONE);
  118.  
  119.                     LT_New(Handle,
  120.                         LA_Type,            PALETTE_KIND,
  121.                         LA_LabelID,            MSG_PENPANEL_IMPORTANT_TEXT_TXT,
  122.                         GTPA_Depth,            Depth,
  123.                         LAPA_SmallPalette,    TRUE,
  124.                         LA_UWORD,            &PrivateArray[HIGHLIGHTTEXTPEN],
  125.                         LA_ID,                100 + HIGHLIGHTTEXTPEN,
  126.                     TAG_DONE);
  127.  
  128.                     LT_New(Handle,
  129.                         LA_Type,            PALETTE_KIND,
  130.                         LA_LabelID,            MSG_PENPANEL_BRIGHT_EDGES_TXT,
  131.                         GTPA_Depth,            Depth,
  132.                         LAPA_SmallPalette,    TRUE,
  133.                         LA_UWORD,            &PrivateArray[SHINEPEN],
  134.                         LA_ID,                100 + SHINEPEN,
  135.                     TAG_DONE);
  136.  
  137.                     LT_New(Handle,
  138.                         LA_Type,            PALETTE_KIND,
  139.                         LA_LabelID,            MSG_PENPANEL_DARK_EDGES_TXT,
  140.                         GTPA_Depth,            Depth,
  141.                         LAPA_SmallPalette,    TRUE,
  142.                         LA_UWORD,            &PrivateArray[SHADOWPEN],
  143.                         LA_ID,                100 + SHADOWPEN,
  144.                     TAG_DONE);
  145.  
  146.                     LT_New(Handle,
  147.                         LA_Type,            PALETTE_KIND,
  148.                         LA_LabelID,            MSG_PENPANEL_FILLPEN_TXT,
  149.                         GTPA_Depth,            Depth,
  150.                         LAPA_SmallPalette,    TRUE,
  151.                         LA_UWORD,            &PrivateArray[FILLPEN],
  152.                         LA_ID,                100 + FILLPEN,
  153.                     TAG_DONE);
  154.  
  155.                     LT_New(Handle,
  156.                         LA_Type,            PALETTE_KIND,
  157.                         LA_LabelID,            MSG_PENPANEL_FILLTEXTPEN_TXT,
  158.                         GTPA_Depth,            Depth,
  159.                         LAPA_SmallPalette,    TRUE,
  160.                         LA_UWORD,            &PrivateArray[FILLTEXTPEN],
  161.                         LA_ID,                100 + FILLTEXTPEN,
  162.                     TAG_DONE);
  163.  
  164.                     LT_New(Handle,
  165.                         LA_Type,            PALETTE_KIND,
  166.                         LA_LabelID,            MSG_PENPANEL_BARFILLPEN_TXT,
  167.                         GTPA_Depth,            Depth,
  168.                         LAPA_SmallPalette,    TRUE,
  169.                         LA_UWORD,            &PrivateArray[BARBLOCKPEN],
  170.                         LA_ID,                100 + BARBLOCKPEN,
  171.                     TAG_DONE);
  172.  
  173.                     LT_New(Handle,
  174.                         LA_Type,            PALETTE_KIND,
  175.                         LA_LabelID,            MSG_PENPANEL_BARTEXTPEN_TXT,
  176.                         GTPA_Depth,            Depth,
  177.                         LAPA_SmallPalette,    TRUE,
  178.                         LA_UWORD,            &PrivateArray[BARDETAILPEN],
  179.                         LA_ID,                100 + BARDETAILPEN,
  180.                     TAG_DONE);
  181.  
  182.                     LT_EndGroup(Handle);
  183.                 }
  184.  
  185.                 LT_New(Handle,
  186.                     LA_Type,XBAR_KIND,
  187.                 TAG_DONE);
  188.  
  189.                 LT_New(Handle,
  190.                     LA_Type,    VERTICAL_KIND,
  191.                 TAG_DONE);
  192.                 {
  193.                     LT_New(Handle,
  194.                         LA_Type,        BUTTON_KIND,
  195.                         LA_LabelID,        MSG_PENPANEL_STANDARDPENS_TXT,
  196.                         LA_ID,            GAD_DEFAULT,
  197.                         LABT_ExtraFat,    TRUE,
  198.                     TAG_DONE);
  199.  
  200.                     LT_EndGroup(Handle);
  201.                 }
  202.  
  203.                 LT_EndGroup(Handle);
  204.             }
  205.  
  206.             LT_New(Handle,
  207.                 LA_Type,VERTICAL_KIND,
  208.             TAG_DONE);
  209.             {
  210.                 LT_New(Handle,
  211.                     LA_Type,        XBAR_KIND,
  212.                     LAXB_FullSize,    TRUE,
  213.                 TAG_DONE);
  214.  
  215.                 LT_EndGroup(Handle);
  216.             }
  217.  
  218.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  219.                 LAGR_SameSize,    TRUE,
  220.                 LAGR_Spread,    TRUE,
  221.             TAG_DONE);
  222.             {
  223.                 LT_New(Handle,
  224.                     LA_Type,        BUTTON_KIND,
  225.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  226.                     LA_ID,            GAD_USE,
  227.                     LABT_ReturnKey,    TRUE,
  228.                     LABT_ExtraFat,    TRUE,
  229.                 TAG_DONE);
  230.  
  231.                 LT_New(Handle,
  232.                     LA_Type,        BUTTON_KIND,
  233.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  234.                     LA_ID,            GAD_CANCEL,
  235.                     LABT_EscKey,    TRUE,
  236.                     LABT_ExtraFat,    TRUE,
  237.                 TAG_DONE);
  238.  
  239.                 LT_EndGroup(Handle);
  240.             }
  241.  
  242.             LT_EndGroup(Handle);
  243.         }
  244.  
  245.         if(PanelWindow = LT_Build(Handle,
  246.             LAWN_TitleID,        MSG_PENPANEL_SCREEN_DRAWING_PENS_TXT,
  247.             LAWN_HelpHook,        &GuideHook,
  248.             LAWN_Parent,        Window,
  249.             WA_DepthGadget,        TRUE,
  250.             WA_DragBar,            TRUE,
  251.             WA_RMBTrap,            TRUE,
  252.             WA_Activate,        TRUE,
  253.             WA_SimpleRefresh,    TRUE,
  254.         TAG_DONE))
  255.         {
  256.             struct IntuiMessage    *Message;
  257.             struct Gadget *MsgGadget;
  258.             ULONG MsgClass;
  259.             BOOL Done;
  260.             LONG i;
  261.  
  262.             PushWindow(PanelWindow);
  263.  
  264.             LT_ShowWindow(Handle,TRUE);
  265.  
  266.             GuideContext(CONTEXT_SCREEN);
  267.  
  268.             Done = FALSE;
  269.  
  270.             do
  271.             {
  272.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  273.                     break;
  274.  
  275.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  276.                 {
  277.                     MsgClass    = Message->Class;
  278.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  279.  
  280.                     LT_ReplyIMsg(Message);
  281.  
  282.                     if(MsgClass == IDCMP_GADGETUP)
  283.                     {
  284.                         switch(MsgGadget->GadgetID)
  285.                         {
  286.                             case GAD_USE:
  287.  
  288.                                 CopyMem(PrivateArray,Array,sizeof(PrivateArray));
  289.  
  290.                                 Array[DETAILPEN]    = PrivateArray[BACKGROUNDPEN];
  291.                                 Array[BLOCKPEN]        = PrivateArray[SHADOWPEN];
  292.                                 Array[BARTRIMPEN]    = PrivateArray[BARDETAILPEN];
  293.  
  294.                                 Result = Done = TRUE;
  295.                                 break;
  296.  
  297.                             case GAD_CANCEL:
  298.  
  299.                                 Done = TRUE;
  300.                                 break;
  301.  
  302.                             case GAD_DEFAULT:
  303.  
  304.                                 for(i = TEXTPEN ; i <= BARBLOCKPEN ; i++)
  305.                                     LT_SetAttributes(Handle,100 + i,GTPA_Color,DefaultArray[i],TAG_DONE);
  306.  
  307.                                 break;
  308.                         }
  309.                     }
  310.                 }
  311.             }
  312.             while(!Done);
  313.  
  314.             PopWindow();
  315.         }
  316.  
  317.         LT_DeleteHandle(Handle);
  318.     }
  319.  
  320.     return(Result);
  321. }
  322.  
  323. BOOL
  324. ScreenPanel(struct Window *Parent,struct Configuration *LocalConfig)
  325. {
  326.     STATIC LONG PageTitleID[6] =
  327.     {
  328.         MSG_V36_0163,
  329.         MSG_V36_0164,
  330.         MSG_V36_0165,
  331.         MSG_V36_0166,
  332.         MSG_PENPANEL_DRAWING_PENS_TXT,
  333.         -1
  334.     };
  335.  
  336.     STATIC BYTE InitialPage = 0;
  337.  
  338.     LayoutHandle *Handle;
  339.     STRPTR PageTitle[6];
  340.     BOOL UseIt;
  341.  
  342.     UseIt = FALSE;
  343.  
  344.     LocalizeStringTable(PageTitle,PageTitleID);
  345.  
  346.         /* Make a backup of the current settings. We will modify only */
  347.         /* the backup */
  348.  
  349.     SaveConfig(LocalConfig,PrivateConfig);
  350.  
  351.         /* If the settings aren't yet patched up for 96 bit mode, */
  352.         /* do it now. */
  353.  
  354.     if(!PrivateConfig->ScreenConfig->UseColours96)
  355.     {
  356.         Colour12x96(PrivateConfig->ScreenConfig->Colours,PrivateConfig->ScreenConfig->Colours96,16);
  357.  
  358.         PrivateConfig->ScreenConfig->UseColours96 = TRUE;
  359.     }
  360.  
  361.     if(Handle = LT_CreateHandleTags(Parent->WScreen,
  362.         LAHN_LocaleHook,    &LocaleHook,
  363.         LAHN_ExactClone,    TRUE,
  364.         LAHN_ExitFlush,        FALSE,
  365.     TAG_DONE))
  366.     {
  367.         UBYTE ModeName[DISPLAYNAMELEN + 1],FontName[MAX_FILENAME_LENGTH];
  368.         struct Window *LocalWindow;
  369.         ULONG DisplayMode;
  370.         BOOL FixedColours;
  371.  
  372.         FixedColours = CannotChangeColours(PrivateConfig,LocalConfig->ScreenConfig->ColourMode);
  373.  
  374.             /* Get the desired screen display mode */
  375.  
  376.         DisplayMode = PrivateConfig->ScreenConfig->DisplayMode;
  377.  
  378.             /* Is the requested screen display mode available on this machine? */
  379.  
  380.         if(ModeNotAvailable(DisplayMode))
  381.         {
  382.             struct Screen *PubScreen = LockPubScreen(NULL);
  383.  
  384.                 /* Lock the default public screen */
  385.  
  386.             if(PubScreen)
  387.             {
  388.                 struct DimensionInfo DimensionInfo;
  389.  
  390.                     /* Use the default display mode */
  391.  
  392.                 DisplayMode = GetVPModeID(&PubScreen->ViewPort);
  393.  
  394.                     /* Get the default screen size for this display mode */
  395.  
  396.                 if(GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,DisplayMode))
  397.                 {
  398.                     LONG Width,Height;
  399.  
  400.                     Width    = DimensionInfo.TxtOScan.MaxX - DimensionInfo.TxtOScan.MinX + 1;
  401.                     Height    = DimensionInfo.TxtOScan.MaxY - DimensionInfo.TxtOScan.MinY + 1;
  402.  
  403.                         /* If the screen is set to a specific size, override */
  404.                         /* these settings with defaults. */
  405.  
  406.                     if(Width != PrivateConfig->ScreenConfig->DisplayWidth && PrivateConfig->ScreenConfig->DisplayWidth > 0)
  407.                         PrivateConfig->ScreenConfig->DisplayWidth = Width;
  408.  
  409.                     if(Height != PrivateConfig->ScreenConfig->DisplayHeight && PrivateConfig->ScreenConfig->DisplayHeight > 0)
  410.                         PrivateConfig->ScreenConfig->DisplayHeight = Height;
  411.                 }
  412.  
  413.                 UnlockPubScreen(NULL,PubScreen);
  414.             }
  415.             else
  416.                 DisplayMode = DEFAULT_MONITOR_ID | HIRES_KEY;    /* Catch all... */
  417.         }
  418.  
  419.             /* The name of the display mode chosen */
  420.  
  421.         GetModeName(DisplayMode,ModeName,sizeof(ModeName));
  422.  
  423.         BuildFontName(FontName,sizeof(FontName),PrivateConfig->ScreenConfig->FontName,PrivateConfig->ScreenConfig->FontHeight);
  424.  
  425.             /* If we cannot change the colours, or would */
  426.             /* display the wrong colours when choosing the */
  427.             /* rendering pens, don't display the last */
  428.             /* two pages */
  429.  
  430.         if(FixedColours)
  431.         {
  432.             if(InitialPage > 2)
  433.                 InitialPage = 2;
  434.  
  435.             PageTitle[3] = NULL;
  436.         }
  437.  
  438.         if(!Kick30)
  439.         {
  440.             if(InitialPage > 3)
  441.                 InitialPage = 3;
  442.  
  443.             PageTitle[4] = NULL;
  444.         }
  445.  
  446.         LT_New(Handle,
  447.             LA_Type,    VERTICAL_KIND,
  448.         TAG_DONE);
  449.         {
  450.             LT_New(Handle,
  451.                 LA_Type,VERTICAL_KIND,
  452.             TAG_DONE);
  453.             {
  454.                 LT_New(Handle,
  455.                     LA_Type,        TAB_KIND,
  456.                     LA_ID,            GAD_PAGER,
  457.                     LA_LabelID,        MSG_XFER_PAGE_TXT,
  458.                     GTCY_Labels,    PageTitle,
  459.                     LACY_AutoPageID,GAD_PAGEGROUP,
  460.                     LACY_TabKey,    TRUE,
  461.                     LA_BYTE,        &InitialPage,
  462.                     LATB_FullWidth,    TRUE,
  463.                 TAG_DONE);
  464.  
  465.                 LT_EndGroup(Handle);
  466.             }
  467.  
  468.             LT_New(Handle,
  469.                 LA_Type,        VERTICAL_KIND,
  470.                 LA_ID,            GAD_PAGEGROUP,
  471.                 LAGR_ActivePage,InitialPage,
  472.             TAG_DONE);
  473.             {
  474.                 LT_New(Handle,
  475.                     LA_Type,    VERTICAL_KIND,
  476.                 TAG_DONE);
  477.                 {
  478.                     LT_New(Handle,
  479.                         LA_Type,    VERTICAL_KIND,
  480.                     TAG_DONE);
  481.                     {
  482.                         LT_New(Handle,
  483.                             LA_Type,        TEXT_KIND,
  484.                             LA_LabelID,        MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD,
  485.                             LA_Chars,        DISPLAYNAMELEN,
  486.                             LA_ID,            GAD_SCREENMODE,
  487.                             GTTX_Text,        ModeName,
  488.                             GTTX_Border,    TRUE,
  489.                             LATX_Picker,    TRUE,
  490.                             LATX_LockSize,    TRUE,
  491.                         TAG_DONE);
  492.  
  493.                         LT_New(Handle,
  494.                             LA_Type,        TEXT_KIND,
  495.                             LA_LabelID,        MSG_SCREENPANEL_SCREEN_FONT_GAD,
  496.                             LA_ID,            GAD_FONT,
  497.                             LA_Chars,        DISPLAYNAMELEN,
  498.                             GTTX_Text,        FontName,
  499.                             GTTX_Border,    TRUE,
  500.                             LATX_Picker,    TRUE,
  501.                             LATX_LockSize,    TRUE,
  502.                         TAG_DONE);
  503.  
  504.                         LT_EndGroup(Handle);
  505.                     }
  506.  
  507.                     LT_New(Handle,
  508.                         LA_Type,    VERTICAL_KIND,
  509.                     TAG_DONE);
  510.                     {
  511.                         if(Kick30)
  512.                         {
  513.                             LT_New(Handle,
  514.                                 LA_Type,    CHECKBOX_KIND,
  515.                                 LA_LabelID,    MSG_SCREENPANEL_FASTER_LAYOUT_GAD,
  516.                                 LA_BYTE,    &PrivateConfig->ScreenConfig->FasterLayout,
  517.                             TAG_DONE);
  518.                         }
  519.  
  520.                         LT_New(Handle,
  521.                             LA_Type,        CHECKBOX_KIND,
  522.                             LA_LabelID,        MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD,
  523.                             LA_BYTE,        &PrivateConfig->ScreenConfig->MakeScreenPublic,
  524.                             LA_ID,            GAD_MAKESCREENPUBLIC,
  525.                             GA_Disabled,    PrivateConfig->ScreenConfig->UseWorkbench,
  526.                         TAG_DONE);
  527.  
  528.                         LT_EndGroup(Handle);
  529.                     }
  530.  
  531.                     LT_New(Handle,
  532.                         LA_Type,    VERTICAL_KIND,
  533.                     TAG_DONE);
  534.                     {
  535.                         LT_New(Handle,
  536.                             LA_Type,    XBAR_KIND,
  537.                         TAG_DONE);
  538.  
  539.                         LT_New(Handle,
  540.                             LA_Type,    CHECKBOX_KIND,
  541.                             LA_ID,        GAD_USE_PUBSCREEN,
  542.                             LA_LabelID,    MSG_SCREENPANEL_USE_WORKBENCH_GAD,
  543.                             LA_BYTE,    &PrivateConfig->ScreenConfig->UseWorkbench,
  544.                         TAG_DONE);
  545.  
  546.                         LT_EndGroup(Handle);
  547.                     }
  548.  
  549.                     LT_New(Handle,
  550.                         LA_Type,    VERTICAL_KIND,
  551.                     TAG_DONE);
  552.                     {
  553.                         LT_New(Handle,
  554.                             LA_Type,        STRING_KIND,
  555.                             LA_LabelID,        MSG_SCREENPANEL_PUBSCREEN_NAME_GAD,
  556.                             LA_ID,            GAD_PUBSCREENNAME,
  557.                             LA_STRPTR,        PrivateConfig->ScreenConfig->PubScreenName,
  558.                             LA_Chars,        14,
  559.                             GTST_MaxChars,    sizeof(PrivateConfig->ScreenConfig->PubScreenName) - 1,
  560.                             LAST_Picker,    TRUE,
  561.                             GA_Disabled,    !PrivateConfig->ScreenConfig->UseWorkbench,
  562.                         TAG_DONE);
  563.  
  564.                         LT_EndGroup(Handle);
  565.                     }
  566.  
  567.                     LT_EndGroup(Handle);
  568.                 }
  569.  
  570.                 LT_New(Handle,
  571.                     LA_Type,    VERTICAL_KIND,
  572.                 TAG_DONE);
  573.                 {
  574.                     LT_New(Handle,
  575.                         LA_Type,    VERTICAL_KIND,
  576.                     TAG_DONE);
  577.                     {
  578.                         LT_New(Handle,
  579.                             LA_Type,        CHECKBOX_KIND,
  580.                             LA_LabelID,        MSG_SCREENPANEL_SCREEN_TITLE_GAD,
  581.                             LA_BYTE,        &PrivateConfig->ScreenConfig->TitleBar,
  582.                             LA_ID,            GAD_SCREENTITLE,
  583.                             GA_Disabled,    PrivateConfig->ScreenConfig->UseWorkbench,
  584.                         TAG_DONE);
  585.  
  586.                         LT_New(Handle,
  587.                             LA_Type,        CHECKBOX_KIND,
  588.                             LA_LabelID,        MSG_SCREENPANEL_WINDOW_BORDER_TXT,
  589.                             LA_BYTE,        &PrivateConfig->ScreenConfig->ShareScreen,
  590.                             LA_ID,            GAD_WINDOW_BORDER,
  591.                             GA_Disabled,    PrivateConfig->ScreenConfig->UseWorkbench,
  592.                         TAG_DONE);
  593.  
  594.                         LT_New(Handle,
  595.                             LA_Type,        XBAR_KIND,
  596.                         TAG_DONE);
  597.  
  598.                         PrivateConfig->ScreenConfig->StatusLine &= 0xF;
  599.  
  600.                         LT_New(Handle,
  601.                             LA_Type,        CHECKBOX_KIND,
  602.                             LA_LabelID,        MSG_SCREENPANEL_SEPARATE_STATUS_WINDOW_TXT,
  603.                             LA_BYTE,        &PrivateConfig->ScreenConfig->SplitStatus,
  604.                             LA_ID,            GAD_SPLIT_STATUS,
  605.                             GA_Disabled,    !PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),
  606.                         TAG_DONE);
  607.  
  608.                         LT_EndGroup(Handle);
  609.                     }
  610.  
  611.                     LT_New(Handle,
  612.                         LA_Type,    VERTICAL_KIND,
  613.                     TAG_DONE);
  614.                     {
  615.                         LT_New(Handle,
  616.                             LA_Type,        CYCLE_KIND,
  617.                             LA_LabelID,        MSG_SCREENPANEL_STATUS_LINE_GAD,
  618.                             LA_BYTE,        &PrivateConfig->ScreenConfig->StatusLine,
  619.                             LACY_FirstLabel,MSG_SCREENPANEL_STATUS_DISABLED_TXT,
  620.                             LACY_LastLabel,    MSG_SCREENPANEL_STATUS_COMPACT_TXT,
  621.                             LA_ID,            GAD_STATUS_LINE,
  622.                         TAG_DONE);
  623.  
  624.                         LT_New(Handle,
  625.                             LA_Type,        CYCLE_KIND,
  626.                             LA_LabelID,        MSG_SCREENPANEL_ONLINE_TIME_GAD,
  627.                             LA_BYTE,        &PrivateConfig->ScreenConfig->TimeMode,
  628.                             LACY_FirstLabel,MSG_SCREENPANEL_TIME_ONLINETIME_TXT,
  629.                             LACY_LastLabel,    MSG_SCREENPANEL_TIME_BOTH_TXT,
  630.                         TAG_DONE);
  631.  
  632.                         LT_EndGroup(Handle);
  633.                     }
  634.  
  635.                     LT_EndGroup(Handle);
  636.                 }
  637.  
  638.                 LT_New(Handle,
  639.                     LA_Type,    VERTICAL_KIND,
  640.                 TAG_DONE);
  641.                 {
  642.                     LT_New(Handle,
  643.                         LA_Type,        MX_KIND,
  644.                         LA_LabelID,        MSG_SCREENPANEL_COLOUR_GAD,
  645.                         LA_WORD,        &PrivateConfig->ScreenConfig->ColourMode,
  646.                         LA_ID,            GAD_COLOURMODE,
  647.                         LAMX_FirstLabel,MSG_SCREENPANEL_COLOUR_AMIGA_TXT,
  648.                         LAMX_LastLabel,    MSG_SCREENPANEL_COLOUR_MONO_TXT,
  649.                     TAG_DONE);
  650.  
  651.                     LT_New(Handle,
  652.                         LA_Type,        CHECKBOX_KIND,
  653.                         LA_LabelID,        MSG_SCREENPANEL_BLINKING_GAD,
  654.                         LA_ID,            GAD_BLINKING,
  655.                         LA_BYTE,        &PrivateConfig->ScreenConfig->Blinking,
  656.                         GA_Disabled,    PrivateConfig->ScreenConfig->ColourMode == COLOUR_MONO,
  657.                         LA_ExtraSpace,    TRUE,
  658.                     TAG_DONE);
  659.  
  660.                     LT_EndGroup(Handle);
  661.                 }
  662.  
  663.                 if(!FixedColours)
  664.                 {
  665.                     LT_New(Handle,
  666.                         LA_Type,    VERTICAL_KIND,
  667.                     TAG_DONE);
  668.                     {
  669.                         LONG Depth;
  670.  
  671.                         switch(PrivateConfig->ScreenConfig->ColourMode)
  672.                         {
  673.                             case COLOUR_MONO:
  674.  
  675.                                 Depth = 1;
  676.                                 break;
  677.  
  678.                             case COLOUR_AMIGA:
  679.  
  680.                                 Depth = 2;
  681.                                 break;
  682.  
  683.                             case COLOUR_EIGHT:
  684.  
  685.                                 Depth = 3;
  686.                                 break;
  687.  
  688.                             case COLOUR_SIXTEEN:
  689.  
  690.                                 Depth = 4;
  691.                                 break;
  692.                         }
  693.  
  694.                         if(PrivateConfig->ScreenConfig->UseWorkbench)
  695.                         {
  696.                             LONG i,MaxDepth = 4;
  697.  
  698.                             for(i = 0 ; i < 4 ; i++)
  699.                             {
  700.                                 if((1L << i) > Window->WScreen->ViewPort.ColorMap->Count)
  701.                                 {
  702.                                     MaxDepth = i;
  703.  
  704.                                     break;
  705.                                 }
  706.                             }
  707.  
  708.                             if(Depth > MaxDepth)
  709.                                 Depth = MaxDepth;
  710.                         }
  711.  
  712.                         LT_New(Handle,
  713.                             LA_Type,    VERTICAL_KIND,
  714.                         TAG_DONE);
  715.                         {
  716.                             STRPTR ColourFormat;
  717.                             LONG ColourMax;
  718.  
  719.                             if(Kick30)
  720.                             {
  721.                                 ColourMax        = 255;
  722.                                 ColourFormat    = "%3ld";
  723.                             }
  724.                             else
  725.                             {
  726.                                 ColourMax        = 15;
  727.                                 ColourFormat    = "%2ld";
  728.                             }
  729.  
  730.                             LT_New(Handle,
  731.                                 LA_Type,            PALETTE_KIND,
  732.                                 LA_LabelID,            MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD,
  733.                                 LA_ID,                GAD_PALETTE,
  734.                                 LA_Chars,            12,
  735.                                 GTPA_Depth,            Depth,
  736.                             TAG_DONE);
  737.  
  738.                             LT_New(Handle,
  739.                                 LA_Type,            SliderType,
  740.                                 LA_LabelID,            MSG_SCREENPANEL_RED_GAD,
  741.                                 LA_ID,                GAD_RED,
  742.                                 GTSL_Min,            0,
  743.                                 GTSL_Max,            ColourMax,
  744.                                 GTSL_Level,            0,
  745.                                 GTSL_LevelFormat,    ColourFormat,
  746.                             TAG_DONE);
  747.  
  748.                             LT_New(Handle,
  749.                                 LA_Type,            SliderType,
  750.                                 LA_LabelID,            MSG_SCREENPANEL_GREEN_GAD,
  751.                                 LA_ID,                GAD_GREEN,
  752.                                 GTSL_Min,            0,
  753.                                 GTSL_Max,            ColourMax,
  754.                                 GTSL_Level,            0,
  755.                                 GTSL_LevelFormat,    ColourFormat,
  756.                             TAG_DONE);
  757.  
  758.                             LT_New(Handle,
  759.                                 LA_Type,            SliderType,
  760.                                 LA_LabelID,            MSG_SCREENPANEL_BLUE_GAD,
  761.                                 LA_ID,                GAD_BLUE,
  762.                                 GTSL_Min,            0,
  763.                                 GTSL_Max,            ColourMax,
  764.                                 GTSL_Level,            0,
  765.                                 GTSL_LevelFormat,    ColourFormat,
  766.                             TAG_DONE);
  767.  
  768.                             LT_New(Handle,
  769.                                 LA_Type,            XBAR_KIND,
  770.                             TAG_DONE);
  771.  
  772.                             LT_EndGroup(Handle);
  773.                         }
  774.  
  775.                         LT_New(Handle,
  776.                             LA_Type,    VERTICAL_KIND,
  777.                         TAG_DONE);
  778.                         {
  779.                             LT_New(Handle,
  780.                                 LA_Type,    BUTTON_KIND,
  781.                                 LA_LabelID,    MSG_SCREENPANEL_USE_DEFAULT_TXT,
  782.                                 LA_ID,        GAD_RESET,
  783.                                 LA_Chars,    16,
  784.                             TAG_DONE);
  785.  
  786.                             LT_EndGroup(Handle);
  787.                         }
  788.  
  789.                         LT_EndGroup(Handle);
  790.                     }
  791.  
  792.                     if(Kick30)
  793.                     {
  794.                         LT_New(Handle,
  795.                             LA_Type,    VERTICAL_KIND,
  796.                         TAG_DONE);
  797.                         {
  798.                             LT_New(Handle,
  799.                                 LA_Type,    VERTICAL_KIND,
  800.                             TAG_DONE);
  801.                             {
  802.                                 LT_New(Handle,
  803.                                     LA_Type,        CHECKBOX_KIND,
  804.                                     LA_LabelID,        MSG_PENPANEL_STANDARDPENS_TXT,
  805.                                     LA_ID,            GAD_STDPENS,
  806.                                     LA_BYTE,        &PrivateConfig->ScreenConfig->UsePens,
  807.                                     GA_Disabled,    PrivateConfig->ScreenConfig->UseWorkbench,
  808.                                 TAG_DONE);
  809.  
  810.                                 LT_EndGroup(Handle);
  811.                             }
  812.  
  813.                             LT_New(Handle,
  814.                                 LA_Type,    VERTICAL_KIND,
  815.                             TAG_DONE);
  816.                             {
  817.                                 LT_New(Handle,
  818.                                     LA_Type,        BUTTON_KIND,
  819.                                     LA_LabelID,        MSG_PENPANEL_EDITPENS_TXT,
  820.                                     LA_ID,            GAD_EDITPENS,
  821.                                     GA_Disabled,    PrivateConfig->ScreenConfig->UsePens || PrivateConfig->ScreenConfig->UseWorkbench,
  822.                                 TAG_DONE);
  823.  
  824.                                 LT_EndGroup(Handle);
  825.                             }
  826.  
  827.                             LT_EndGroup(Handle);
  828.                         }
  829.                     }
  830.                 }
  831.  
  832.                 LT_EndGroup(Handle);
  833.             }
  834.  
  835.             LT_New(Handle,
  836.                 LA_Type,    VERTICAL_KIND,
  837.             TAG_DONE);
  838.             {
  839.                 LT_New(Handle,
  840.                     LA_Type,        XBAR_KIND,
  841.                     LAXB_FullSize,    TRUE,
  842.                 TAG_DONE);
  843.  
  844.                 LT_EndGroup(Handle);
  845.             }
  846.  
  847.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  848.                 LAGR_SameSize,    TRUE,
  849.                 LAGR_Spread,    TRUE,
  850.             TAG_DONE);
  851.             {
  852.                 LT_New(Handle,
  853.                     LA_Type,        BUTTON_KIND,
  854.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  855.                     LA_ID,            GAD_USE,
  856.                     LABT_ReturnKey,    TRUE,
  857.                     LABT_ExtraFat,    TRUE,
  858.                 TAG_DONE);
  859.  
  860.                 LT_New(Handle,
  861.                     LA_Type,        BUTTON_KIND,
  862.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  863.                     LA_ID,            GAD_CANCEL,
  864.                     LABT_EscKey,    TRUE,
  865.                     LABT_ExtraFat,    TRUE,
  866.                 TAG_DONE);
  867.  
  868.                 LT_EndGroup(Handle);
  869.             }
  870.  
  871.             LT_EndGroup(Handle);
  872.         }
  873.  
  874.         if(LocalWindow = LT_Build(Handle,
  875.             LAWN_TitleID,        MSG_SCREENPANEL_SCREEN_PREFERENCES_TXT,
  876.             LAWN_HelpHook,        &GuideHook,
  877.             LAWN_Parent,        Parent,
  878.             WA_DepthGadget,        TRUE,
  879.             WA_DragBar,            TRUE,
  880.             WA_RMBTrap,            TRUE,
  881.             WA_Activate,        TRUE,
  882.             WA_SimpleRefresh,    TRUE,
  883.         TAG_DONE))
  884.         {
  885.             struct IntuiMessage    *Message;
  886.             struct ViewPort *LocalVPort;
  887.             LONG ColourNumber,Count,i;
  888.             struct Gadget *MsgGadget;
  889.             WORD Red,Green,Blue;
  890.             UWORD *DefaultPens;
  891.             ULONG MsgClass;
  892.             UWORD MsgCode;
  893.             LONG Depth;
  894.             BOOL Done;
  895.  
  896.             ColourNumber = 0;
  897.             LocalVPort = &LocalWindow->WScreen->ViewPort;
  898.  
  899.             switch(PrivateConfig->ScreenConfig->ColourMode)
  900.             {
  901.                 case COLOUR_MONO:
  902.  
  903.                     DefaultPens = MonoPens;
  904.                     Depth = 1;
  905.                     break;
  906.  
  907.                 case COLOUR_AMIGA:
  908.  
  909.                     DefaultPens = StandardPens;
  910.                     Depth = 2;
  911.                     break;
  912.  
  913.                 case COLOUR_EIGHT:
  914.  
  915.                     DefaultPens = ANSIPens;
  916.                     Depth = 3;
  917.                     break;
  918.  
  919.                 case COLOUR_SIXTEEN:
  920.  
  921.                     if(Kick30)
  922.                         DefaultPens = NewEGAPens;
  923.                     else
  924.                         DefaultPens = EGAPens;
  925.  
  926.                     Depth = 4;
  927.                     break;
  928.             }
  929.  
  930.             for(Count = 0, i = DETAILPEN ; i <= BARTRIMPEN ; i++)
  931.             {
  932.                 if(PrivateConfig->ScreenConfig->PenArray[i])
  933.                     Count++;
  934.             }
  935.  
  936.             if(!Count)
  937.                 CopyMem(DefaultPens,PrivateConfig->ScreenConfig->PenArray,16 * sizeof(UWORD));
  938.  
  939.             PrivateConfig->ScreenConfig->DisplayMode = DisplayMode;
  940.  
  941.             if(!FixedColours)
  942.             {
  943.                 if(Kick30)
  944.                 {
  945.                     Red        = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] >> 24;
  946.                     Green    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] >> 24;
  947.                     Blue    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] >> 24;
  948.                 }
  949.                 else
  950.                 {
  951.                     Red        = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 8) & 0xF;
  952.                     Green    = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 4) & 0xF;
  953.                     Blue    = (PrivateConfig->ScreenConfig->Colours[ColourNumber]     ) & 0xF;
  954.                 }
  955.  
  956.                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  957.                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  958.                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  959.  
  960.                 PaletteSetup(PrivateConfig);
  961.  
  962.                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  963.                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  964.             }
  965.  
  966.             GuideContext(CONTEXT_SCREEN);
  967.  
  968.             PushWindow(LocalWindow);
  969.  
  970.             LT_ShowWindow(Handle,TRUE);
  971.  
  972.             Done = FALSE;
  973.  
  974.             do
  975.             {
  976.                 if(Wait(PORTMASK(LocalWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  977.                     break;
  978.  
  979.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  980.                 {
  981.                     MsgClass    = Message->Class;
  982.                     MsgCode        = Message->Code;
  983.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  984.  
  985.                     LT_ReplyIMsg(Message);
  986.  
  987.                     if(MsgClass == IDCMP_GADGETUP || MsgClass == IDCMP_MOUSEMOVE || MsgClass == IDCMP_GADGETDOWN)
  988.                     {
  989.                         switch(MsgGadget->GadgetID)
  990.                         {
  991.                             case GAD_RED:
  992.  
  993.                                 if(Kick30)
  994.                                     Red = MsgCode;
  995.                                 else
  996.                                     Red = (MsgCode << 4) | MsgCode;
  997.  
  998.                                 PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] = SPREAD(Red);
  999.  
  1000.                                 PaletteSetup(PrivateConfig);
  1001.  
  1002.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1003.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1004.  
  1005.                                 break;
  1006.  
  1007.                             case GAD_GREEN:
  1008.  
  1009.                                 if(Kick30)
  1010.                                     Green = MsgCode;
  1011.                                 else
  1012.                                     Green = (MsgCode << 4) | MsgCode;
  1013.  
  1014.                                 PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] = SPREAD(Green);
  1015.  
  1016.                                 PaletteSetup(PrivateConfig);
  1017.  
  1018.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1019.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1020.  
  1021.                                 break;
  1022.  
  1023.                             case GAD_BLUE:
  1024.  
  1025.                                 if(Kick30)
  1026.                                     Blue = MsgCode;
  1027.                                 else
  1028.                                     Blue = (MsgCode << 4) | MsgCode;
  1029.  
  1030.                                 PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] = SPREAD(Blue);
  1031.  
  1032.                                 PaletteSetup(PrivateConfig);
  1033.  
  1034.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1035.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1036.  
  1037.                                 break;
  1038.  
  1039.                             case GAD_STDPENS:
  1040.  
  1041.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1042.                                     GA_Disabled,PrivateConfig->ScreenConfig->UsePens || PrivateConfig->ScreenConfig->UseWorkbench || FixedColours,
  1043.                                 TAG_DONE);
  1044.  
  1045.                                 break;
  1046.  
  1047.                             case GAD_USE_PUBSCREEN:
  1048.  
  1049.                                 LT_SetAttributes(Handle,GAD_PUBSCREENNAME,        GA_Disabled,!PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
  1050.                                 LT_SetAttributes(Handle,GAD_MAKESCREENPUBLIC,    GA_Disabled,PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
  1051.                                 LT_SetAttributes(Handle,GAD_SCREENTITLE,        GA_Disabled,PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
  1052.                                 LT_SetAttributes(Handle,GAD_WINDOW_BORDER,        GA_Disabled,PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
  1053.                                 LT_SetAttributes(Handle,GAD_BLINKING,            GA_Disabled,PrivateConfig->ScreenConfig->ColourMode == COLOUR_MONO,TAG_DONE);
  1054.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,        GA_Disabled,!PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),TAG_DONE);
  1055.  
  1056.                                 FixedColours = CannotChangeColours(PrivateConfig,LocalConfig->ScreenConfig->ColourMode);
  1057.  
  1058.                                 LT_SetAttributes(Handle,GAD_PALETTE,            GA_Disabled,FixedColours,TAG_DONE);
  1059.                                 LT_SetAttributes(Handle,GAD_RED,                GA_Disabled,FixedColours,TAG_DONE);
  1060.                                 LT_SetAttributes(Handle,GAD_GREEN,                GA_Disabled,FixedColours,TAG_DONE);
  1061.                                 LT_SetAttributes(Handle,GAD_BLUE,                GA_Disabled,FixedColours,TAG_DONE);
  1062.                                 LT_SetAttributes(Handle,GAD_RESET,                GA_Disabled,FixedColours,TAG_DONE);
  1063.  
  1064.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1065.                                     GA_Disabled,    PrivateConfig->ScreenConfig->UsePens || PrivateConfig->ScreenConfig->UseWorkbench || FixedColours,
  1066.                                 TAG_DONE);
  1067.  
  1068.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1069.                                     GTCB_Checked,    PrivateConfig->ScreenConfig->UsePens = TRUE,
  1070.                                     GA_Disabled,    PrivateConfig->ScreenConfig->UseWorkbench || FixedColours,
  1071.                                 TAG_DONE);
  1072.  
  1073.                                 break;
  1074.  
  1075.                             case GAD_WINDOW_BORDER:
  1076.  
  1077.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),TAG_DONE);
  1078.                                 break;
  1079.  
  1080.                             case GAD_COLOURMODE:
  1081.  
  1082.                                 if(!ModeOkay(PrivateConfig->ScreenConfig->DisplayMode) && PrivateConfig->ScreenConfig->ColourMode > COLOUR_AMIGA)
  1083.                                     LT_SetAttributes(Handle,GAD_COLOURMODE,GTCY_Active,COLOUR_AMIGA,TAG_DONE);
  1084.  
  1085.                                 FixedColours = CannotChangeColours(PrivateConfig,LocalConfig->ScreenConfig->ColourMode);
  1086.  
  1087.                                 LT_SetAttributes(Handle,GAD_PALETTE,    GA_Disabled,FixedColours,TAG_DONE);
  1088.                                 LT_SetAttributes(Handle,GAD_RED,        GA_Disabled,FixedColours,TAG_DONE);
  1089.                                 LT_SetAttributes(Handle,GAD_GREEN,        GA_Disabled,FixedColours,TAG_DONE);
  1090.                                 LT_SetAttributes(Handle,GAD_BLUE,        GA_Disabled,FixedColours,TAG_DONE);
  1091.                                 LT_SetAttributes(Handle,GAD_RESET,        GA_Disabled,FixedColours,TAG_DONE);
  1092.                                 LT_SetAttributes(Handle,GAD_BLINKING,    GA_Disabled,PrivateConfig->ScreenConfig->ColourMode == COLOUR_MONO,TAG_DONE);
  1093.  
  1094.                                 switch(PrivateConfig->ScreenConfig->ColourMode)
  1095.                                 {
  1096.                                     case COLOUR_MONO:
  1097.  
  1098.                                         DefaultPens = MonoPens;
  1099.                                         Depth = 1;
  1100.                                         break;
  1101.  
  1102.                                     case COLOUR_AMIGA:
  1103.  
  1104.                                         DefaultPens = StandardPens;
  1105.                                         Depth = 2;
  1106.                                         break;
  1107.  
  1108.                                     case COLOUR_EIGHT:
  1109.  
  1110.                                         DefaultPens = ANSIPens;
  1111.                                         Depth = 3;
  1112.                                         break;
  1113.  
  1114.                                     case COLOUR_SIXTEEN:
  1115.  
  1116.                                         DefaultPens = EGAPens;
  1117.                                         Depth = 4;
  1118.                                         break;
  1119.                                 }
  1120.  
  1121.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1122.                                     GA_Disabled,    FixedColours,
  1123.                                 TAG_DONE);
  1124.  
  1125.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1126.                                     GA_Disabled,    FixedColours,
  1127.                                 TAG_DONE);
  1128.  
  1129.                                 Default2CurrentPalette(PrivateConfig);
  1130.  
  1131.                                 break;
  1132.  
  1133.                             case GAD_EDITPENS:
  1134.  
  1135.                                 LT_LockWindow(LocalWindow);
  1136.  
  1137.                                 if(PrivateConfig->ScreenConfig->PenColourMode != PrivateConfig->ScreenConfig->ColourMode)
  1138.                                 {
  1139.                                     UWORD LocalPens[16];
  1140.  
  1141.                                     CopyMem(DefaultPens,LocalPens,16 * sizeof(UWORD));
  1142.  
  1143.                                     if(ScreenPenPanel(LocalWindow,LocalPens,DefaultPens,Depth))
  1144.                                     {
  1145.                                         CopyMem(LocalPens,PrivateConfig->ScreenConfig->PenArray,16 * sizeof(UWORD));
  1146.  
  1147.                                         PrivateConfig->ScreenConfig->PenColourMode = PrivateConfig->ScreenConfig->ColourMode;
  1148.                                     }
  1149.                                 }
  1150.                                 else
  1151.                                     ScreenPenPanel(LocalWindow,PrivateConfig->ScreenConfig->PenArray,DefaultPens,Depth);
  1152.  
  1153.                                 LT_UnlockWindow(LocalWindow);
  1154.  
  1155.                                 LT_ShowWindow(Handle,TRUE);
  1156.                                 break;
  1157.  
  1158.                             case GAD_PALETTE:
  1159.  
  1160.                                 ColourNumber = MsgCode;
  1161.  
  1162.                                 if(Kick30)
  1163.                                 {
  1164.                                     Red        = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] >> 24;
  1165.                                     Green    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] >> 24;
  1166.                                     Blue    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] >> 24;
  1167.                                 }
  1168.                                 else
  1169.                                 {
  1170.                                     Red        = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 8) & 0xF;
  1171.                                     Green    = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 4) & 0xF;
  1172.                                     Blue    = (PrivateConfig->ScreenConfig->Colours[ColourNumber]     ) & 0xF;
  1173.                                 }
  1174.  
  1175.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1176.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1177.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1178.  
  1179.                                 break;
  1180.  
  1181.                             case GAD_RESET:
  1182.  
  1183.                                 Default2CurrentPalette(PrivateConfig);
  1184.  
  1185.                                 if(Kick30)
  1186.                                 {
  1187.                                     Red        = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] >> 24;
  1188.                                     Green    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] >> 24;
  1189.                                     Blue    = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] >> 24;
  1190.                                 }
  1191.                                 else
  1192.                                 {
  1193.                                     Red        = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 8) & 0xF;
  1194.                                     Green    = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 4) & 0xF;
  1195.                                     Blue    = (PrivateConfig->ScreenConfig->Colours[ColourNumber]     ) & 0xF;
  1196.                                 }
  1197.  
  1198.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1199.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1200.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1201.  
  1202.                                 PaletteSetup(PrivateConfig);
  1203.  
  1204.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1205.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1206.  
  1207.                                 break;
  1208.  
  1209.                             case GAD_USE:
  1210.  
  1211.                                 LT_UpdateStrings(Handle);
  1212.  
  1213.                                 if(!FixedColours)
  1214.                                     PaletteSetup(PrivateConfig);
  1215.                                 else
  1216.                                 {
  1217.                                     if(PrivateConfig->ScreenConfig->ColourMode != PrivateConfig->ScreenConfig->ColourMode)
  1218.                                         Default2CurrentPalette(PrivateConfig);
  1219.                                 }
  1220.  
  1221.                                 if(PrivateConfig->ScreenConfig->PenColourMode != PrivateConfig->ScreenConfig->ColourMode)
  1222.                                 {
  1223.                                     CopyMem(DefaultPens,PrivateConfig->ScreenConfig->PenArray,16 * sizeof(UWORD));
  1224.  
  1225.                                     PrivateConfig->ScreenConfig->PenColourMode = PrivateConfig->ScreenConfig->ColourMode;
  1226.                                 }
  1227.  
  1228.                                 UseIt = Done = TRUE;
  1229.                                 break;
  1230.  
  1231.                             case GAD_CANCEL:
  1232.  
  1233.                                 Done = TRUE;
  1234.                                 break;
  1235.                         }
  1236.                     }
  1237.  
  1238.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  1239.                     {
  1240.                         switch(MsgGadget->GadgetID)
  1241.                         {
  1242.                             case GAD_FONT:
  1243.  
  1244.                                 if(OpenAnyFont(LocalWindow,PrivateConfig->ScreenConfig->FontName,&PrivateConfig->ScreenConfig->FontHeight))
  1245.                                 {
  1246.                                     BuildFontName(FontName,sizeof(FontName),PrivateConfig->ScreenConfig->FontName,PrivateConfig->ScreenConfig->FontHeight);
  1247.  
  1248.                                     LT_SetAttributes(Handle,GAD_FONT,
  1249.                                         GTTX_Text,    FontName,
  1250.                                     TAG_DONE);
  1251.                                 }
  1252.  
  1253.                                 break;
  1254.  
  1255.                             case GAD_SCREENMODE:
  1256.  
  1257.                                 LT_LockWindow(LocalWindow);
  1258.  
  1259.                                 if(PickDisplayMode(LocalWindow,&PrivateConfig->ScreenConfig->DisplayMode,PrivateConfig))
  1260.                                 {
  1261.                                     GetModeName(PrivateConfig->ScreenConfig->DisplayMode,ModeName,sizeof(ModeName));
  1262.  
  1263.                                     LT_SetAttributes(Handle,GAD_SCREENMODE,GTTX_Text,ModeName,TAG_DONE);
  1264.                                 }
  1265.  
  1266.                                 LT_UnlockWindow(LocalWindow);
  1267.  
  1268.                                 LT_ShowWindow(Handle,TRUE);
  1269.  
  1270.                                 break;
  1271.  
  1272.                             case GAD_STATUS_LINE:
  1273.  
  1274.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),TAG_DONE);
  1275.  
  1276.                                 break;
  1277.  
  1278.                             case GAD_PUBSCREENNAME:
  1279.  
  1280.                                 if(PrivateConfig->ScreenConfig->UseWorkbench)
  1281.                                 {
  1282.                                     UBYTE DummyBuffer[MAXPUBSCREENNAME + 1];
  1283.                                     UBYTE LocalBuffer[256];
  1284.  
  1285.                                     LT_LockWindow(LocalWindow);
  1286.  
  1287.                                     strcpy(DummyBuffer,LT_GetString(Handle,GAD_PUBSCREENNAME));
  1288.                                     strcpy(LocalBuffer,DummyBuffer);
  1289.  
  1290.                                     if(PickScreen(LocalWindow,DummyBuffer))
  1291.                                     {
  1292.                                         if(strcmp(DummyBuffer,LocalBuffer))
  1293.                                             LT_SetAttributes(Handle,GAD_PUBSCREENNAME,GTST_String,DummyBuffer,TAG_DONE);
  1294.                                     }
  1295.  
  1296.                                     LT_UnlockWindow(LocalWindow);
  1297.  
  1298.                                     LT_ShowWindow(Handle,TRUE);
  1299.                                 }
  1300.  
  1301.                                 break;
  1302.                         }
  1303.                     }
  1304.                 }
  1305.             }
  1306.             while(!Done);
  1307.  
  1308.             PopWindow();
  1309.  
  1310.             if(((UseIt && Config != LocalConfig) || (!UseIt && Config == LocalConfig)) && !Config->ScreenConfig->UseWorkbench && Screen)
  1311.             {
  1312.                 PaletteSetup(Config);
  1313.  
  1314.                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1315.                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1316.             }
  1317.         }
  1318.  
  1319.         LT_DeleteHandle(Handle);
  1320.     }
  1321.  
  1322.     if(UseIt)
  1323.         SwapConfig(LocalConfig,PrivateConfig);
  1324.     else
  1325.         SaveConfig(LocalConfig,PrivateConfig);
  1326.  
  1327.     return(UseIt);
  1328. }
  1329.